package itm.dao.login;

//~--- non-JDK imports --------------------------------------------------------
import itm.exception.DAOException;
import itm.vo.login.RolVO;
import itm.vo.login.LoginVO;

//~--- JDK imports ------------------------------------------------------------

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrador
 */
public class LoginDAO {

    private CallableStatement callStmt = null;
    private ResultSet res = null;
    private String sql = "";
    Connection dbConexion;

    public LoginDAO(Connection dbConexion) {
        this.dbConexion = dbConexion;
    }

    public LoginVO consultarUsuario(String nombreUsuario, String claveUsuario) throws SQLException {
        LoginVO loginVO = new LoginVO();
        try {
            sql = "{call ITM_CONSULTAR_USUARIO_LOGIN(?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, nombreUsuario);
            callStmt.setString(2, claveUsuario);
            res = callStmt.executeQuery();

            if (res.next()) {
                loginVO = new LoginVO();
                loginVO.setIdPersona(res.getString(1));
                loginVO.setNombre(res.getString(2));
                loginVO.setNombreusuario(res.getString(3));
                loginVO.setClaveusuario(res.getString(4));
            }
        } catch (Exception ce) {
            ce.getStackTrace();
        }

        return loginVO;
    }

    public List<RolVO> ObtenerPermisosRol(long idRol) throws DAOException {
        List<RolVO> lista = new ArrayList<RolVO>();
        RolVO rol;
        try {
            sql = "{call PRC_ITM_OBTENER_PERMISOS_ROL(?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setLong(1, idRol);
            res = callStmt.executeQuery();
            while (res.next()) {
                rol = new RolVO();
                rol.setIdCaso(res.getString(1));
                rol.setNombreCaso(res.getString(2));
                rol.setIdModulo(res.getString(3));
                rol.setNombreModulo(res.getString(4));
                rol.setUrl(res.getString(5));
                lista.add(rol);
            }
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(LoginDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al consultar permisos en la base de datos", ex);
        }

    }

    public List<RolVO> listarRoles()throws DAOException{

        List<RolVO> lista = new ArrayList<RolVO>();
        RolVO rol;
        try {
            sql = "{call PRC_ITM_LISTAR_ROLES}";
            callStmt = dbConexion.prepareCall(sql);
            res = callStmt.executeQuery();
            while (res.next()) {
                rol = new RolVO();
                rol.setIdRol(res.getString(1));
                rol.setNombreRol(res.getString(2));
                lista.add(rol);
            }
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(LoginDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al listar roles", ex);
        }

    }

    public String personaRolExsite(long idPersona, long idRol)throws DAOException{
        try {
            sql = "{call PRC_ITM_PERSONA_ROL_EXISTE(?,?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setLong(1, idPersona);
            callStmt.setLong(2, idRol);
            callStmt.registerOutParameter(3, java.sql.Types.VARCHAR);
            callStmt.execute();
            return callStmt.getString(3);
        } catch (SQLException ex) {
            Logger.getLogger(LoginDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al consultar", ex);
        }

    }
}
